/**
 * 角色实体类 - RBAC权限管理系统的角色定义实体
 *
 * 开发人员：陈宏伟
 * 开发时间：2025-10-20 至 2025-10-25
 * 模块职责：定义系统角色的基本信息和业务属性，支持多租户角色管理和权限控制
 *
 * 技术要点：
 * - 多租户关联设计，与企业实体关联
 * - 内置角色标识，支持系统预设角色
 * - 角色代码唯一性约束确保角色标识唯一
 * - 审计字段自动维护角色信息变更
 * - 角色描述支持丰富文本信息
 *
 * 开发故事：负责角色实体的数据模型设计，与权限服务和用户角色关联深度配合，实现灵活的多租户权限管理系统。
 */
package com.pbl.entity;

import lombok.*;

import javax.persistence.*;
import java.time.LocalDateTime;

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Entity
@Table(name = "roles")
public class Role {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "enterprise_id", nullable = false)
    private Enterprise enterprise;

    @Column(nullable = false, length = 64)
    private String code;

    @Column(nullable = false, length = 64)
    private String name;

    @Column(length = 255)
    private String description;

    @Column(name = "built_in", nullable = false)
    private Integer builtIn;

    @Column(name = "created_at", insertable = false, updatable = false)
    private LocalDateTime createdAt;

    @Column(name = "updated_at", insertable = false, updatable = false)
    private LocalDateTime updatedAt;
}
